package com.ctl.szmd.szmd.feature_wm.data.repository.pagingsource

import androidx.paging.PagingSource
import com.ctl.szmd.szmd.feature_wm.data.api.WmService
import com.ctl.szmd.szmd.feature_wm.data.mapper.wm.WmDataBean2WmDataModel
import com.ctl.szmd.szmd.feature_wm.data.model.WmDataListModel

/**
 * created by : chentl
 * Date: 2020/07/28
 */
class HeadlinesPagingSource(val api: WmService) :
    PagingSource<Int, WmDataListModel>() {
    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, WmDataListModel> {
        // 如果key是null，那就加载第0页的数据
        val page = params.key ?: 0
        return try {
            val response = api.infoWomenHeadlineListData(
                page, params.loadSize
            )
            val result = WmDataBean2WmDataModel().map(response)

            // 如果成功加载，那么返回一个LoadResult.Page,如果失败就返回一个Error
            // Page里传进列表数据，以及上一页和下一页的页数,具体的是否最后一页或者其他逻辑就自行判断
            // 需要注意的是，如果是第一页，prevKey就传null，如果是最后一页那么nextKey也传null
            // 其他情况prevKey就是page-1，nextKey就是page+1
            LoadResult.Page(
                data = result?.dataList ?: mutableListOf(),
                prevKey = null,
                nextKey = if ((result?.pageSize ?: 0) * (result?.currentPage
                        ?: 0) < (result?.pageAllCount ?: 0)
                ) page + 1
                else null
            )
        } catch (e: Exception) {
            // 捕获异常，返回一个Error
            LoadResult.Error(e)
        }
    }
}